package org.tp;


import org.tp.*;
/** stockage d'une variable : id, type, valeur, allocation**/
public class Variable {

	private String id;
	private Type type;
	private Object valeur;
	private boolean alloc;
/** nouvelle variable, met alloc en fonction du type **/
	public  Variable(String id, Type type, Object valeur){
		this.id=id;
		this.type=type;
		this.valeur=valeur;	
		if(type.getEnumType().toString()=="int"||
				type.getEnumType().toString()=="char"||
				type.getEnumType().toString()=="real"||
				type.getEnumType().toString()=="double"||
				type.getEnumType().toString()=="boolean"){

			alloc=true;
		}
		else{

			alloc=false;
		}
	}
/** modifie le bool d'allocation en true**/
	void Alloc(){alloc=true;}
	
/** renvoie le bool de l'allocation**/

	boolean getAlloc(){  return alloc;}
/**retourne le nom**/	
	String getid(){
		return this.id;
	}
/**retourne la valeur**/	
	Object getVal(){
		return this.valeur;	
	}
/**retourne le type**/	
	Type getType(){
		return this.type;
	}
/** permet de modifier la valeur**/
	void setVal(Object val){
		this.valeur=val;	
	}
/** affiche la variable**/
	public void varToString()
	{
		if(valeur instanceof AbSynt)
			valeur = ((AbSynt)valeur).toString();
		if(valeur instanceof Struct)
		{
			System.out.println(type.toString() + " " + id + "{");
			((Struct)valeur).structToString();
			System.out.println("};");
			return;
		}
		if(type == null)
		{
			System.out.println("id :"+id + " = " + valeur.toString());
			return;
		}
		if(valeur == null)
		{
			System.out.println("type :"+type.toString() + " id :" + id);
			return;
		}
		System.out.println("type : "+type.toString() + " id :" + id + " = " + valeur.toString());
	}
}
